package william.list;

/**
 * @author ZhangShenao
 * @date 2024/3/12
 * @description <a href="https://leetcode.cn/problems/delete-node-in-a-linked-list/description/">...</a>
 */
public class Leetcode237_删除链表中的节点 {
    private class ListNode {
        int val;
        ListNode next;

        ListNode(int x) {
            val = x;
        }
    }

    /**
     * 通过修改节点的值实现
     * 找到待删除节点的next节点,将待删除节点的值设置为next节点的值,并将当前节点的next指针指向next节点的next节点
     * <p>
     * 时间复杂度O(1) 仅需常数次操作
     * 空间复杂的O(1)
     */
    public void deleteNode(ListNode node) {
        //边界条件校验
        if (node == null) {
            return;
        }

        //待删除节点为尾节点,直接设置为null即可
        if (node.next == null) {
            node = null;
            return;
        }

        //找到待删除节点的next节点,将待删除节点的值设置为next节点的值,并将当前节点的next指针指向next节点的next节点
        ListNode del = node.next;
        node.val = del.val;
        node.next = del.next;
    }
}
